home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / MATH / MATH1 / ERFD.PAS < prev    next >
Pascal/Delphi Source File  |  1985-04-03  |  896b  |  50 lines

  1. program erfd;        { -> 326 }
  2.  
  3. { evaluation of the gaussian error function }
  4.  
  5. var    x,ans        : real;
  6.     done        : boolean;
  7.  
  8. function erf(x: real): real;
  9. { infinite series expansion of the Gaussian error function }
  10.  
  11. const    sqrtpi        = 1.7724538;
  12.     tol        = 1.0E-6;
  13.  
  14. var    x2,sum,sum1,term: real;
  15.     i        : integer;
  16.  
  17. begin
  18.   if x=0.0 then erf:=0.0
  19.   else if x>4.0 then erf:=1.0
  20.   else
  21.     begin
  22.       x2:=x*x;
  23.       sum:=x;
  24.       term:=x;
  25.       i:=0;
  26.       repeat
  27.     i:=i+1;
  28.     sum1:=sum;
  29.     term:=2.0*term*x2/(1.0+2.0*i);
  30.     sum:=term+sum1
  31.       until term<tol*sum;
  32.       erf:=2.0*sum*exp(-x2)/sqrtpi
  33.   end    { if }
  34. end;    { erf }
  35.  
  36. begin        { main }
  37.   done:=false;
  38.   writeln;
  39.   repeat
  40.     write('Arg? ');
  41.     readln(x);
  42.     if x<0.0 then done:= true
  43.     else
  44.       begin
  45.     ans:=erf(x);
  46.     writeln('Erf of ',x:6:3,' is ',ans:9:5)
  47.       end
  48.   until done
  49. end.
  50.